﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProcelNasEscolas.Model.Fichas;
using ProcelNasEscolas.Model.Interfaces;
using ProcelNasEscolas.Model.Respostas;
using ProcelNasEscolas.Model;

namespace ProcelNasEscolas.Data
{
    public class EntidadeDao : AbstractCrudDao<IEntidadeData>, IEntidadeDao
    {
        public IEntidade ToModelObject(IEntidadeData entidadeData)
        {
            IEntidade entidadeModel = new IEntidade();
            
            switch (entidadeData.GetType().Name)
            {
                case "AlunoData":
                    {
                        entidadeModel = new AlunoDao().ToModelObject((AlunoData)entidadeData);
                    };
                    break;
                case "ConcessionariaData":
                    {
                        entidadeModel = new ConcessionariaDao().ToModelObject((ConcessionariaData)entidadeData);
                    };
                    break;
                case "EscolaData":
                    {
                        entidadeModel = new EscolaDao().ToModelObject((EscolaData)entidadeData);
                    };
                    break;
                case "ProfessorData":
                    {
                        entidadeModel = new ProfessorDao().ToModelObject((ProfessorData)entidadeData);
                    };
                    break;
                case "TurmaData":
                    {
                        entidadeModel = new TurmaDao().ToModelObject((TurmaData)entidadeData);
                    };
                    break;
            }

            return entidadeModel;
        }

        public IEntidadeData CreateOrUpdate(IEntidade entidadeModel)
        {
            IEntidadeData entidadeData = new IEntidadeData();

            switch (entidadeModel.GetType().Name)
            {
                case "Aluno":
                    {
                        entidadeData = new AlunoDao().CreateOrUpdate((Aluno)entidadeModel);
                    };
                    break;
                case "Concessionaria":
                    {
                        entidadeData = new ConcessionariaDao().CreateOrUpdate((Concessionaria)entidadeModel); 
                    };
                    break;
                case "Escola":
                    {
                        entidadeData = new EscolaDao().CreateOrUpdate((Escola)entidadeModel); 
                    };
                    break;
                case "Professor":
                    {
                        entidadeData = new ProfessorDao().CreateOrUpdate((Professor)entidadeModel); 
                    };
                    break;
                case "Turma":
                    {
                        entidadeData = new TurmaDao().CreateOrUpdate((Turma)entidadeModel); 
                    };
                    break;
            }

            return entidadeData;
        }
    }
}